/*
  翻译软件
  题目描述
    乔斯最近开发了一个机器翻译软件，同学们经常用这个软件来翻译英语的文章。
    这个翻译软件的原理很简单，它只是从头到尾，依次将每个英文单词用对应的中文含义来替换。
    而存放英文单词对应中文含义的地址分为内存和外存中的词典。
    对于每个英文单词，软件会先在内存中查找这个单词的中文含义，
      如果内存中有，软件就会用它进行翻译；
      如果内存中没有，软件就会在外存中的词典内查找，查出单词的中文含义然后翻译，并将这个单词和译义放入内存，以备后续的查找和翻译。

    假设内存中有 M 个单元，每单元能存放一个单词和译义。
    每当软件将一个新单词存入内存前，如果当前内存中已存入的单词数不超过 M-1，软件会将新单词存入一个未使用的内存单元；
    若内存中已存入 M 个单词，软件会清空最早进入内存的那个单词，腾出单元来，存放新单词。

    假设一篇英语文章的长度为 N 个单词。给定这篇待译文章，翻译软件需要去外存查找多少次词典？
    假设在翻译开始前，内存中没有任何单词。
  输入
    共 2 行。每行中两个数之间用一个空格隔开。
    第一行为两个正整数 M 和 N，代表内存容量和文章的长度。
    第二行为 N 个非负整数，按照文章的顺序，每个数（大小不超过 1000）代表一个英文单词。
      文章中两个单词是同一个单词，当且仅当它们对应的非负整数相同。
  输出
    共 1 行，包含一个整数，为软件需要查词典的次数。
  样例输入
    3 7
    1 2 1 5 4 4 1
  样例输出
    5
  提示
    整个查字典过程如下：每行表示一个单词的翻译，冒号前为本次翻译后的内存状况：
      空：内存初始状态为空。
      1．1：查找单词1并调入内存。
      2．1 2：查找单词2并调入内存。
      3．1 2：在内存中找到单词1。
      4．1 2 5：查找单词5并调入内存。
      5．2 5 4：查找单词4并调入内存替代单词1。
      6．2 5 4：在内存中找到单词4。
      7．5 4 1：查找单词1并调入内存替代单词2。
    共计查了 5 次词典。
  数据范围
    对于 10% 的数据有 M = 1，N ≤ 5。
    对于 100% 的数据有 0 < M ≤ 100，0 < N ≤ 1000。
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int m, n;
    int x = 0;
    /*
      注意:
        本题中用 1 个动态数组和 1 个队列 来模拟内存!
        利用队列的 fifo 特性来模拟 "进入内存"、"被踢出内存" 的顺序;
        同时利用 "动态数组可以访问数组中的每一个元素" 的特性，来模拟查找内存中是否存在某个单词
    */
    queue <int> q1;
    vector <int> num;

    cin >> m >> n;

    for (int i = 1; i <= n; i++) {
        int y;
        cin >> y;

        if (num.empty()) { // 如果内存为空, 则查字典, 并将查到的内容放进内存
            num.push_back(y);   // 单词(查字典查到内容)进内存
            q1.push(y);
            x++;                // 查字典的次数 + 1
        } else {           // 内存不为空
            if (find(num.begin(), num.end(), y) != num.end()) { // 如果单词就在内存中, 那么不需要查字典
                continue;
            } else { // 单词不在内存中, 则需要去查字典
                if (num.size() >= m) { // 当内存已满时, 需要踢掉最开始进内存的单词, 查字典 并将查到的内容放进内存
                    auto a = find(num.begin(), num.end(), q1.front()); /* 注意: 使用 find() 函数的返回值为 auto 迭代器 */
                    if (a != num.end()) {
                        q1.pop();
                        num.erase(a);  /* 注意: 此处 vector 的 erase() 的传入参数为 find() 函数的返回值 */

                        num.push_back(y);  // 单词(查字典查到内容)进内存
                        q1.push(y);
                        x++;               // 查字典的次数 + 1
                    }
                } else { // 内存没有满, 则查字典, 并且将查到的内容放进内存
                    num.push_back(y);   // 单词(查字典查到内容)放进内存
                    q1.push(y);
                    x++;                // 查字典的次数 + 1
                }
            }
        }
    }
    cout << x;

    return 0;
}